package com.example.paichaapp;

import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.app.PendingIntent;
import android.content.Intent;
import android.nfc.FormatException;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.Ndef;
import android.nfc.tech.NdefFormatable;
import android.os.Build;
import android.os.Bundle;
import android.widget.Toast;

public class NfcWriteActivity extends BaseNfcActivity{
    /**
     *nfc写卡功能
     */
    private String mPackageName = "com.example.paichaapp"; // 短信APP包名
//    private String mPackageName = "com.tencent.mm"; // 微信APP包名

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_nfc_write);
    }

    // 将Activity的launchMode设置成singleTop，这样当感应到NFC标签时不会重复打开页面，而是回调该方法
    @Override
    public void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Tag detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        writeTag(detectedTag);
    }

    /**
     * 写标
     * @param tag
     */
    public void writeTag(Tag tag) {
        if (tag == null) {
            return;
        }

        // 利用应用包名创建待写入的数据
        NdefMessage ndefMessage = new NdefMessage(new NdefRecord[]{NdefRecord
                .createApplicationRecord(mPackageName)});

//        NdefMessage ndefMessage = new NdefMessage(new NdefRecord[]{NdefRecord
//                .createUri(Uri.parse("http://www.baidu.com"))});

        // 获取内容字节大小
        int size = ndefMessage.toByteArray().length;
        try {
            // 获取Nedf
            Ndef ndef = Ndef.get(tag);
            // 不为空表示该标签为Nedf格式
            if (ndef != null) {
                ndef.connect();
                // 是否可写
                if (!ndef.isWritable()) {
                    Toast.makeText(this, "标签不支持写入", Toast.LENGTH_SHORT).show();
                    return;
                }
                // 判断写入内容大小是否超出允许写入的最大值
                if (ndef.getMaxSize() < size) {
                    Toast.makeText(this, "写入内容过大", Toast.LENGTH_SHORT).show();
                    return;
                }
                // 写入数据
                ndef.writeNdefMessage(ndefMessage);
                Toast.makeText(this, "写入成功", Toast.LENGTH_SHORT).show();
            } else { // 标签非Nedf格式的情况
                NdefFormatable format = NdefFormatable.get(tag);
                // 不为空表示该标签允许格式化成Ndef格式
                if (format != null) {
                    format.connect();
                    // 格式化并写入Nedf内容
                    format.format(ndefMessage);
                    Toast.makeText(this, "写入成功", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(this, "标签不支持Nedf格式", Toast.LENGTH_SHORT).show();
                }
            }
        } catch (Exception e) {
        }
    }
}